/*
 * jQuery CTree Plugin
 * version v1.0 2010-07-26
 * Editor: collonn
 * Email: collonn@126.com
 */

(function($) {
	
	jQuery.fn.jdtTable = function(params){
		
		defaults = {
			id: '#' + $(this).attr('id'),
			title: null,
			url: null,
			param: null,
			callback: null,
			render: null
		};
		
		jQuery.extend(defaults,params);
		
		if(defaults.title == null){
			jAlert('Title必填且必须大于或等于实际列数');
			return;
		}else if(defaults.url == null){
			jAlert('URL地址必填');
			return;
		}else if(defaults.render != null && defaults.render.length != defaults.title.length){
			jAlert('渲染函数数组长度必须等于标题数组长度');
		}
		
		jQuery.fn.jdtTable.ajax(defaults);
	};
	
	jQuery.fn.jdtTable.ajax = function(defaults){
		//列值正文渲染辅助函数
		function _renderColumn(array, index, data){
			if(defaults.render[index] != null){//td内容需要渲染
				array.push('<td>' + defaults.render[index](data) + '</td>');
			}else{//原始内容
				array.push('<td>' + data + '</td>');
			}
		}
		
		$.ajax({
    		type: 'POST',
    		dataType: 'json',
    		url: defaults.url,
    		data: defaults.param,
    		beforeSend: function(){
				jLoading("正在操作，请稍后...");
			},
    		success: function(rs){
    			jUnloading();
    			
    			//如果结果数组为null，则直接添加提示信息
    			if(rs == null){
    				$(defaults.id).empty().append('<table><tr><td>Nothing found to display ajax</td></tr></table>');
    			}else{
//----------------------------------- 由JSON组合成HTML标签内容开始 -----------------------------------
	    			var a = new Array();
	    			var tds = 0;//tr中共有多少个td
	    			a.push('<table id="rs" class="disTable">');
	    			
	    			//组合标题
	    			a.push('<thead><tr>');
	    			if(defaults.title != null){
	    				for(var i = 0; i < defaults.title.length; i++){
	    					a.push('<th>' + defaults.title[i] + '</th>');
	    				}
	    			}
	    			a.push('</tr></thead>');
	    			
	    			//组合正文
	    			var tds = 0;//实际列数
	    			for(var j in rs[0]){
	    				tds++;
	    			}
	    			a.push('<tbody>');
	    			for(var k = 1; k < rs.length - 1; k++){//rs数组的第一个对象是默认的标题内容，不是正文内容，所以从1开始计算
	    				k%2 == 0 ? a.push('<tr class="even">') : a.push('<tr class="odd">');
	    				var tds2 = 0;
	    				for(var l in rs[k]){
	    					_renderColumn(a, tds2, rs[k][l]);
	    					tds2++;
	    				}
	    				
	    				if(tds < defaults.title.length){//正文列比自定义标题列少
	    					for(var m = tds; m < defaults.title.length; m++){
	    						_renderColumn(a, m, m);
	    					}
	    				}
	    				a.push('</tr>');
	    			}
	    			
	    			//加入分页信息
	    			var pageObj = rs[rs.length - 1];//含有分页属性的对象
	    			a.push('<tr>');
	    			a.push('<td colspan="' + defaults.title.length + '">');
	    			a.push('第' + pageObj.currentListNum + '/[' + pageObj.fullListSize + ']条&nbsp;&nbsp;');
	    			a.push('第[' + pageObj.pageNumber + '/' + pageObj.totalPage + ']页&nbsp;&nbsp;');
	    			a.push('<a id="jdtTableFirstPage" href="javascript:void(0)">首页</a>&nbsp;&nbsp;');
	    			a.push('<a id="jdtTablePrevPage" href="javascript:void(0)">上一页</a>&nbsp;&nbsp;');
	    			a.push('<input id="jdtTableGoPageInput" type="text" style="width:30px;" value="' + pageObj.pageNumber + '"/><a id="jdtTableGoPageA" href="javascript:void(0)">GO</a>&nbsp;&nbsp;');
	    			a.push('<a id="jdtTableNextPage" href="javascript:void(0)">下一页</a>&nbsp;&nbsp;');
	    			a.push('<a id="jdtTableLastPage" href="javascript:void(0)">尾页</a>');
	    			a.push('</td>');
	    			a.push('</tr>');
	    			
	    			a.push('</tbody>');
	    			a.push('</table>');
	    			
	    			$tt = $(defaults.id);
	    			//更新标题和正文
	    			$tt.empty().append(a.join(''));
	//----------------------------------- 由JSON组合成HTML标签内容结束 -----------------------------------
	
	//-----------------------------------       绑定分布事件开始       -----------------------------------
	    			//绑定首页事件
	    			$tt.find('#jdtTableFirstPage').click(function(){
	    				if(pageObj.pageNumber == 1){
	    					return;
	    				}
	    				$tt.jdtTable({
	    					title: defaults.title,
							url: pageObj.url,
							param: pageObj.param + '&page=1',
							render: defaults.render,
							callback: defaults.callback
						});
	    			});
	    			
	    			//绑定上一页事件
	    			$tt.find('#jdtTablePrevPage').click(function(){
	    				if(pageObj.pageNumber == 1){
	    					return;
	    				}
	    				var prevPage = pageObj.pageNumber;
	    				prevPage > 1 ? prevPage-- : prevPage = 1;
	    				$tt.jdtTable({
	    					title: defaults.title,
							url: pageObj.url,
							param: pageObj.param + '&page=' + prevPage,
							render: defaults.render,
							callback: defaults.callback
						});
	    			});
	    			
	    			//绑定转到第n页事件
	    			$tt.find('#jdtTableGoPageA').click(function(){
	    				var $gpi = $tt.find('#jdtTableGoPageInput');
	    				if(!/-*\d{1,}$/.test($gpi.val())){
	    					jAlert('请输入至少一个数字');
	    					return;
	    				}else if(parseInt($gpi.val()) < 1 || parseInt($gpi.val()) > pageObj.totalPage){
	    					jAlert('请输入:1-' + pageObj.totalPage + '之间的数字值');
	    					return;
	    				}else if(parseInt($gpi.val()) == pageObj.pageNumber){
	    					return;
	    				}else{
	    					$tt.jdtTable({
	    						title: defaults.title,
								url: pageObj.url,
								param: pageObj.param + '&page=' + $gpi.val(),
								render: defaults.render,
								callback: defaults.callback
							});
	    				}
	    			});
	    			
	    			//绑定下一页事件
	    			$tt.find('#jdtTableNextPage').click(function(){
	    				if(pageObj.pageNumber == pageObj.totalPage){
	    					return;
	    				}
	    				var nextPage = pageObj.pageNumber;
	    				nextPage < pageObj.totalPage ? nextPage++ : nextPage = pageObj.totalPage;
	    				$tt.jdtTable({
	    					title: defaults.title,
							url: pageObj.url,
							param: pageObj.param + '&page=' + nextPage,
							render: defaults.render,
							callback: defaults.callback
						});
	    			});
	    			
	    			//绑定尾页事件
	    			$tt.find('#jdtTableLastPage').click(function(){
	    				if(pageObj.pageNumber == pageObj.totalPage){
	    					return;
	    				}
	    				$tt.jdtTable({
	    					title: defaults.title,
							url: pageObj.url,
							param: pageObj.param + '&page=' + pageObj.totalPage,
							render: defaults.render,
							callback: defaults.callback
						});
	    			});
	    			
	    			//执行回调函数
					if(defaults.callback != null){
						defaults.callback();
					}
    			}//end else
//-----------------------------------       绑定分布事件结束       -----------------------------------
    		}//end seccess
    	});//end ajax
	}
	
})(jQuery);